<?php

declare(strict_types=1);

namespace App\Middlewares;

use App\Helpers\Auth;
use App\Helpers\URL;
use Riverside\Express\Request;
use Riverside\Express\Response;

/**
 * Middleware que comprueba el rol del usuario autenticado.
 */
class RoleMiddleware
{
    private const ROLES = ['admin', 'user'];

    /**
     * Comprueba el rol del usuario autenticado.
     */
    public function check(Request $req, Response $res): void
    {
        // Obtiene el rol del usuario autenticado.
        $userAuthRole = $req->app->local(Auth::getVarname())['role'];

        if (! in_array($userAuthRole, self::ROLES)) {
            $req->session['error'] = 'Tu cuenta de usuario no tiene los permisos necesarios';

            $res->redirect(URL::site('logout'));
        }
    }

    /**
     * Comprueba si el usuario autenticado es administrador.
     */
    public function isAdmin(Request $req, Response $res): void
    {
        // Obtiene el rol del usuario autenticado.
        $userAuthRole = $req->app->local(Auth::getVarname())['role'];

        if ($userAuthRole !== 'admin') {
            $res->sendStatus(403);
        }
    }
}
